package meterMonitor.mapper;

import meterMonitor.model.Meter;
import meterMonitor.model.Monitor;
import meterMonitor.model.MonitorDetail;
import meterMonitor.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface MonitorMapper {
    int deleteByPrimaryKey(Long pkid);

    int insert(Monitor record);

    int insertSelective(Monitor record);

    Monitor selectByPrimaryKey(Long pkid);

    int updateByPrimaryKeySelective(Monitor record);

    int updateByPrimaryKey(Monitor record);

    //region 报表查询

    /**
     * @param map
     * @return 实时状态报表
     */
    List<RealTimeFlow> getRealTimeFlows(Map<String, String> map);

    /**
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号
     * @param shiftCode    班次
     * @return 日报表
     */
    List<ReportDaily> getReportDaily(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("shiftCode") String shiftCode, @Param("anotherNames") String[] anotherNames);

    /**
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号
     * @return 班次表
     */
    List<ReportShiftly> getReportShiftly(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("anotherNames") String[] anotherNames);


    /**
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号
     * @return 月报表
     */
    List<ReportMonthly> getReportMonthly(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("anotherNames") String[] anotherNames);

    /**
     * 班次汇总报
     *
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号清单
     * @return 班次汇总报表
     */
    List<ReportShiftly> getReportShiftlySum(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("anotherNames") String[] anotherNames);

    /**
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号
     * @param shiftCode    班次
     * @return 日报表
     */
    List<ReportDaily> getReportDailySum(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("shiftCode") String shiftCode, @Param("anotherNames") String[] anotherNames);

    /**
     * @param fromDate     开始日期
     * @param toDate       结束日期
     * @param anotherNames 设备编号
     * @return 月报表
     */
    List<ReportMonthly> getReportMonthlySum(@Param("fromDate") String fromDate, @Param("toDate") String toDate, @Param("anotherNames") String[] anotherNames);

    //endregion

    /**
     * 综合-查询日
     *
     * @param requestMod
     * @return
     */
    List<Monitor> queryForDayCharts(QueryForChartRequest requestMod);

    /**
     * 图表-查询日报表
     *
     * @param requestMod
     * @return
     */
    List<MonitorMeter> queryFor(QueryForChartRequest requestMod);

    List<MonitorMeter> queryForOwnerTimer(QueryForChartRequest requestMod);

    /**
     * 综合-查询月报表
     *
     * @param requestMod
     * @return
     */
    List<MonitorMeter> queryForMonthCharts(QueryForChartRequest requestMod);


    /**
     * 图表-查询月报表
     *
     * @param requestMod
     * @return
     */
    List<MonitorMeter> queryForMonth(QueryForChartRequest requestMod);


    /**
     * 查询仪表使用量，按仪表分组-按日汇总
     *
     * @param requestMod
     * @return
     */
    List<Monitor> queryGroupByMeter(QueryForChartRequest requestMod);

    /**
     * 查询仪表使用量，按仪表分组-按月汇总
     *
     * @param requestMod
     * @return
     */
    List<SuperMeter> queryGroupByMeterForMonth(QueryForChartRequest requestMod);


    /**
     * 按仪表位置查询设备一个月的用水量
     */

    List<MonitorMeter> queryForMeterCharts(QueryForChartRequest requestMod);

    /**
     * 备份指定月数据至monitor_backups表
     *
     * @param month01time
     */
    int Backup_monitor(@Param("month01time") String month01time);

    /**
     * 删除monitor表的指定月数据
     *
     * @param month01time
     * @return
     */
    int delete_monitor(@Param("month01time") String month01time);

    /**
     * 备份指定月数据至monitor_detail_backups表
     *
     * @param month01time
     * @return
     */
    int Backup_monitor_detail(@Param("month01time") String month01time);

    /**
     * 删除指定月monitor_detail表的数据
     *
     * @param month01time
     * @return
     */
    int delete_monitor_detail(@Param("month01time") String month01time);

    /**
     * 备份指定月数据至monitor_hour_backups表
     *
     * @param month01time
     * @return
     */
    int Backup_monitor_hour(@Param("month01time") String month01time);

    /**
     * 删除指定月monitor_hour_backups表的数据
     *
     * @param month01time
     * @return
     */
    int delete_monitor_hour(@Param("month01time") String month01time);

    /**
     * 查询所有设备名称
     *
     * @return
     */
    List<Meter> Select_AllMeterName();


    /**
     * 查询非离线编号
     * @return
     */
    List<String> getMonitorDetail(Date uploadTime);

    List<DIYRepExport> queryForDIYRep(@Param("startDate") String startDate, @Param("endDate") String endDate);

    List<Monitor> selectMonitor(Map<String, String> map);

    List<ReportHourly> getReportHourly(@Param("fromDate") String fromTime, @Param("toDate") String toTime, @Param("anotherNames") String[] device_codes);

    List<ReportHourly> getReportHourlySum(@Param("fromDate") String fromTime, @Param("toDate") String toTime, @Param("anotherNames") String[] device_codes);

    int countOfflineByReaderCode(Monitor monitor);
}